home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 February
/
EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso
/
earcd
/
comm2
/
termsorc.lha
/
Extras
/
Source
/
gtlayout-source.lha
/
LTP_Find.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-09-24
|
3KB
|
171 lines
/* GadTools layout toolkit
**
** Copyright © 1993-1995 by Olaf `Olsen' Barthel
** Freely distributable.
*/
#include "gtlayout_global.h"
WORD __regargs
LTP_Find_Clicked_Item(LayoutHandle *handle,ObjectNode *radio,LONG x,LONG y)
{
if(x >= radio -> Left + INTERWIDTH)
{
WORD i,top = radio -> Top,height,single;
height = ((radio -> Height + handle -> InterHeight) / radio -> Lines);
single = height - handle -> InterHeight;
for(i = 0 ; i <= radio -> Max ; i++)
{
if(y >= top && y < top + single)
return(i);
else
top += height;
}
}
return(-1);
}
/*****************************************************************************/
ObjectNode * __regargs
LTP_FindNode_Position(ObjectNode *group,LONG x,LONG y)
{
ObjectNode *node;
ULONG page;
SCANPAGE(group,node,page)
{
if(node -> Type == GROUP_KIND)
{
ObjectNode *result;
if(result = LTP_FindNode_Position(node,x,y))
return(result);
else
{
if(node -> Top <= y && node -> Top + node -> Height > y && node -> Left <= x && node -> Left + node -> Width > x)
{
while(node)
{
if(node -> ID <= PHANTOM_GROUP_ID)
node = node -> Special . Group . ParentGroup;
else
return(node);
}
return(NULL);
}
}
}
else
{
if(node -> Top <= y && node -> Top + node -> Height > y)
{
switch(node -> Type)
{
case CHECKBOX_KIND:
if(node -> LabelPlace == PLACE_LEFT)
{
if(node -> Left - (node -> LabelWidth + INTERWIDTH) <= x && node -> Left - INTERWIDTH > x)
return(node);
}
else
{
if(node -> Left + node -> Width + INTERWIDTH <= x && node -> Left + node -> Width + INTERWIDTH + node -> LabelWidth > x)
return(node);
}
break;
case MX_KIND:
if(node -> Left + node -> Width + INTERWIDTH <= x && node -> Left + node -> Width + INTERWIDTH + node -> Special . Radio . LabelWidth > x)
return(node);
break;
default:
if(node -> Left <= x && node -> Left + node -> Width > x)
{
if(node -> Type == PICKER_KIND)
return(node -> Special . Picker . Parent -> UserData);
if(node -> Type == INCREMENTER_KIND)
return(node -> Special . Incrementer . Parent -> UserData);
return(node);
}
}
}
}
}
return(NULL);
}
/*****************************************************************************/
ObjectNode * __regargs
LTP_FindNode(ObjectNode *group,LONG id)
{
ObjectNode *node;
ObjectNode *result;
SCANGROUP(group,node)
{
if(node -> Type == GROUP_KIND)
{
if(node -> ID == id)
return(node);
if(result = LTP_FindNode(node,id))
return(result);
}
else
{
if((node -> ID == id) && (node -> Type != PICKER_KIND) && (node -> Type != INCREMENTER_KIND))
return(node);
}
}
return(NULL);
}
/*****************************************************************************/
struct Gadget * __regargs
LTP_FindGadget(LayoutHandle *handle,LONG id)
{
if(handle && handle -> GadgetArray)
{
LONG i = handle -> Count;
while(i--)
{
if(handle -> GadgetArray[i])
{
if(handle -> GadgetArray[i] -> GadgetID == id && handle -> GadgetArray[i] -> UserData)
{
register struct ObjectNode *Node = (struct ObjectNode *)handle -> GadgetArray[i] -> UserData;
if(Node -> PointBack == Node && Node -> Host == handle -> GadgetArray[i])
return(handle -> GadgetArray[i]);
}
}
}
}
return(NULL);
}